package org.example.filter;

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

import java.lang.annotation.Annotation;
import java.util.List;

/**
 * 全局路由过滤器事例：
 * 请求参数中有test且值为1则正常返回结果，即：http://localhost:8500/book/1?test=1
 * 否则直接返回空值
 */
@Component
public class GateWayFilter implements GlobalFilter , Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        List<String> list = request.getQueryParams().get("test");
        if(list != null && list.contains("1")){
            return chain.filter(exchange);
        }else {
            return exchange.getResponse().setComplete();
        }
    }


    /**
     * 此处实现Ordered接口中的getOrder方法，可以实现有多个过滤器时改变过滤器的执行顺序，
     * 即过滤器的执行优先级，返回的值越小优先级越高，当yml中配置的过滤器order的值（yml中过滤器默认的order值为1）
     * 和自定义全局过滤器的order值相同时，优先执行自定义全局的过滤器
     **/
    @Override
    public int getOrder() {
        return 0;
    }
}
